import { SelectNode } from '@/api/dept/DeptModel'
import { EditType, Title } from '@/type/BaseEnum'
import { DialogModel } from '@/type/BaseType'
import { ElForm } from 'element-plus'
import { nextTick, ref } from 'vue'
import useInstance from '@/hooks/useInstance'
import { AddUserModel } from '@/api/user/UserModel'
export default function useUserAddAndEdit (
  dialog: DialogModel,
  onClose: any,
  onShow: any,
  emit: any,
  addModel: any
) {
  const { global } = useInstance()
  // 表单ref属性，用来做验证
  const addUserForm = ref<InstanceType<typeof ElForm>>()

  const show = (type: string, row: AddUserModel) => {
    // console.log('进入新增编辑组件', type,row);
    onShow()
    dialog.height = 230
    type == EditType.ADD
      ? (dialog.title = Title.ADD)
      : (dialog.title = Title.EDIT)
    global.$resetForm(addUserForm.value, addModel)
    //如果是编辑，要把编辑的数据复制到表单绑定的model里面
    // 这里就需要传递参数，就是这个编辑的时候，
    // 这时就需要再编辑中，传递参数，这个赋值的过程在useUser文件中
    if (type == EditType.EDIT) {
      // console.log('编辑用户')
      nextTick(() => {
        global.$objCoppy(row, addModel)
        addModel.type = type
      })
    }
    //设置是新增还是编辑
    addModel.type = type
  }
  // 弹框确定，开启验证
  const confirm = () => {
    addUserForm.value?.validate(valid => {
      if (valid) {
        console.log('验证通过')
        // 这里把save这个事件给触发了，触发之后会在父组件调用子组件的时候
        // 触发，就是在父组件使用AddAndEdit这个组件的时候才会触发
        emit('save', addModel)
        onClose()
      } else {
        console.log('验证bu通过')
      }
    })
  }

  const select = (node: SelectNode) => {
    addModel.deptId = node.id
    addModel.deptName = node.name
    console.log(addModel)
  }
  return {
    show,
    confirm,
    addUserForm,
    select
  }
}
